Skip to content
On this page

总结

ag 常用指令:

  • --depth: 最大层级
  • -f: 包含符号链接。默认是 False
  • -g: 打印与 PATTERN 匹配的文件名。类似 find -name
  • -G: 仅搜索与PATTERN匹配的文件中的内容,后面还需要加上需要搜索的内容
  • --ignore-dir: 忽略文件
  • -c: 文本匹配数 不是行数,而是匹配数

提问

  • [x] 1. 如何找到当前目录及所有子目录下文件内容包含 hello 的文件

    ag 'hello'

1. 前提提要、场景

如果我们只知道文件内容,想要找出这个文件在哪,find 就无能为力了,可以使用 ag,可以根据内容文件搜索文件。
Ubuntu >= 13.10 (Saucy) or Debian >= 8 (Jessie) 安装: apt-get install silversearcher-ag
其他版本安装可参考文档

2. ag <content> 根据文件内容搜索

sh
$ ag ': "Tab"'

sh
# --depth: 最大层级 
# -A --after: 打印匹配项之后的行数。如果不提供行数,使用这个参数的话,就默认显示匹配项之后的2行
# -B --before: 打印匹配项之前的行数。如果不提供行数,使用这个参数的话,就默认显示匹配项之前的2行
# -C --context: 打印匹配项上下文的行数。默认显示2行
$ ag --depth 1 'main'


# -f --[no]follow: 包含符号链接。默认是False.
$ ag -f 'main' 


# -g: 打印与PATTERN匹配的文件名。类似 find -name
$ ag -g '.json'
package.json
package.hard.json
package-lock.json


# -G --file-search-regex: 仅搜索与PATTERN匹配的文件中的内容,后面还需要加上需要搜索的内容
$ ag -G 'package.json' 'firefly' 

# --ignore-dir: 忽略文件
$ ag --ignore-dir 'node_modules' 'main' 


# -c --count: 文本匹配数 不是行数,而是匹配数
$ ag --depth 0 -c 'firefly' 
package.json:2
package.hard.json:2
package-lock.json:2

2. git grep 据文件内容搜索

git 自带的内容搜索,具体可以使用 man git grep 查看文档

sh
# --max-depth: 最大层级
$ git grep --max-depth 0 'Fire'
package-lock.json:  "name": "Firefly_blog",
package-lock.json:      "name": "Firefly_blog",
package.hard.json:  "description": "Firefly's blog",
package.hard.json:  "author": "Firefly",
package.json:  "description": "Firefly's blog",
package.json:  "author": "Firefly",